<template>
    <div class="person">
        <h2>姓名: {{ name }}</h2>
        <h2>年龄: {{ age }}</h2>
        <button @click="changeName">修改姓名</button>
        <button @click="changeAge">修改年龄</button>
    </div>
</template>


<script lang="ts" setup name="Person">
    
    import {reactive, toRefs, toRef} from 'vue'
    // 定义数据
    let person = reactive({
        name : '张三',
        age : 18
    })

    // toRefs 将对象中的全部属性拷贝出来，转换为ObjectRefImpl
    let {name, age} = toRefs(person)
    // toRef 将对象中的单个属性拷贝出来，转换为ObjectRefImpl
    let nl = toRef(person, 'age')

    // 这里的toRef和toRefs生成数据，和原来reactive生成的对象中的元素对应的地址相同，也就是修改会都生效
    function changeName() {
        name.value += '~' 
    }

    function changeAge() {
        nl.value += 1
    }
</script>


<style scoped>
.person {
    background-color: skyblue;
    box-shadow: 0 0 10px;
    border-radius: 10px;
    padding: 20px;
}

button {
    margin: 0 5px;
}
</style>